home *** CD-ROM | disk | FTP | other *** search
- /*
- * Harvest C
- *
- * Copyright 1991 Eric W. Sink All rights reserved.
- *
- * This file defines the interface for type records.
- *
- */
-
- #ifndef Assem_INTERFACE
- #define Assem_INTERFACE
-
- #include "instenum.h"
-
- typedef int Opcode_t;
-
- struct tmpl { /* a template to match */
- char sizes; /* allowed sizes (bit map) */
- char modes[4]; /* up to 4 EA fields may be
- * specified */
- char opclass; /* opcode class */
- unsigned short op; /* base opcode */
- unsigned short op2; /* second opcode (F-line,
- * etc) */
- };
-
- struct mne { /* a mnemonic */
- char *mne_name;
- Opcode_t OP;
- char ntmpl; /* number of templates to
- * test */
- struct tmpl *ptmpl; /* pointer to templates to
- * test */
- };
-
- /* sizes */
- #define B 0x01
- #define W 0x02
- #define L 0x04
- #define S 0x08
- #define D 0x10
- #define X 0x20
- #define P 0x40
- #define U 0x80
- /* composite sizes */
- #define bwlu (B|W|L|U)
- #define bwlsdxp (B|W|L|S|D|X|P)
- #define wlu (W|L|U)
- #define bu (B|U)
- #define wu (W|U)
- #define lu (L|U)
- #define wl (W|L)
- #define xu (X|U)
- #define bwlsdxpu (B|W|L|S|D|X|P|U)
- #define anysz (B|W|L|S|D|X|P|U)
-
- /* opcode classes */
- #define INH 0
- #define RXRY 1
- #define RXRYS 2
- #define RXRYR 3
- #define RXRYP 4
- #define EAREG 5
- #define EAREGS 6
- #define REGEA 7
- #define REGEAS 8
- #define IMMEAS 9
- #define QUKEA 10
- #define IMMB 11
- #define IMMW 12
- #define IMMWS 13
- #define IMM3 14
- #define IMM4 15
- #define RSHIFT 16
- #define QSHIFT 17
- #define EA 18
- #define EAREV 19
- #define EAS 20
- #define BCC 21
- #define BIT 22
- #define BITFLD 23
- #define BITFLD2 24
- #define CALLM 25
- #define CAS 26
- #define CAS2 27
- #define CHK 28
- #define CHK2 29
- #define DBCC 30
- #define MULDIV 40
- #define REG 41
- #define MOVEU 42 /* move to/from usp */
- #define REGIMM 43
- #define MOVE 44
- #define MOVEC 45
- #define MOVEQ 46
- #define MOVEMO 47
- #define MOVEMI 48
- #define MOVEPO 49
- #define MOVEPI 50
- #define MOVES 51
- #define TRAPCC 52
-
- /* floating point classes */
- #define FEAREG 53
- #define FREGREG 54
- #define FMONAD 55
- #define FBCC 56
- #define FDBCC 57
- #define FINH 58
- #define FEA 59
- #define FSCC 60
- #define FEAPAIR 61
- #define FREGPAIR 62
- #define FTSTEA 63
- #define FTSTREG 64
- #define FMOVE 65
- #define FMOVECR 66
- #define FMOVEMI 67
- #define FMOVEMO 68
- #define FMOVEMCI 69
- #define FMOVEMCO 70
- #define FTRAPCC 71
-
- /* PMMU classes */
- #define PINH 72
- #define PBCC 73
- #define PDBCC 74
- #define PFLUSH 75
- #define PEA 76
- #define PLOAD 77
- #define PMOVEI 78
- #define PMOVEO 79
- #define PSCC 80
- #define PTEST 81
- #define PTRAPCC 82
- #define PVALID 83
- #define PMOVEIF 84
-
- /* generic co-processor classes */
- #define CPINH 85
- #define CPBCC 86
- #define CPDBCC 87
- #define CPGEN 88
- #define CPEA 89
- #define CPSCC 90
- #define CPTRAPCC 91
-
- /* 68hc16 specific classes */
- #define LPSTOP 92
- #define TABEA 93
- #define TABREG 94
-
- /* pseudo op classes */
- #define EQU 100
- #define DC 101
- #define OPT 102
- #define ORG 103
- #define DS 104
- #define FEQU 105
- #define FOPT 106
- #define NULL_OP 107
- #define ALIGN 108
- #define INCLUDE 109
- #define RORG 110
- #define CODEW 111
-
- struct ea {
- char type;
- char itype; /* when INDEX or PCINDEX,
- * itype specifies sub-mode */
- int reg; /* An,Dn,Sp,FPn,Rc,FPc,Pn */
- int reg2; /* second register for reg.
- * pairs */
- int konst; /* #val, displacement, branch
- * dest */
- int